home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / music / wdemo201.arj / WINCAKE.MS_ / WINCAKE.bin
Text File  |  1994-02-17  |  20KB  |  601 lines

  1. '**************************************************************************
  2. '* $Header:   G:/src/wcw/mssetup/vcs/wincake.msv   1.23   17 Feb 1994 13:17:14   PS  $
  3. '*
  4. '* DESCRIPTION: MS-Setup script for Wincake and Wcwdemo.
  5. '*
  6. '* $Log:   G:/src/wcw/mssetup/vcs/wincake.msv  $
  7. '* 
  8. '*    Rev 1.23   17 Feb 1994 13:17:14   PS
  9. '* Associate .TPL files with us, too.
  10. '* 
  11. '*    Rev 1.22   11 Jan 1994 13:47:38   CP
  12. '* Create a Home Studio Demo version.
  13. '* 
  14. '*    Rev 1.21   08 Nov 1993 15:41:42   CP
  15. '* Change Lite name from WCWLITE to CAKEHS.
  16. '* 
  17. '*    Rev 1.20   23 Aug 1993 14:06:06   CP
  18. '* Default installation directory for Demo is now C:\WCWDEMO to prevent
  19. '* nuking of previous installations.
  20. '* 
  21. '*    Rev 1.19   24 May 1993 17:09:22   gwh
  22. '* Removed serial number item from user info prompt.
  23. '* 
  24. '*    Rev 1.18   18 Apr 1993 17:50:40   gwh
  25. '* More refinements for user name, organization, serial number stamping.
  26. '* 
  27. '*    Rev 1.17   01 Apr 1993 18:32:44   gwh
  28. '* Prompt user for Name, Organization, and Serial number.
  29. '* Stamp the .EXE resources for these items.
  30. '* 
  31. '*    Rev 1.16   18 Mar 1993 14:06:42   pws
  32. '* No more need to clean up old DLL's in Windows sys dir (or TTSSEQ.INI).
  33. '* Also check for existence of TTSSEQ.INI in install dir before copying
  34. '* any TTSSEQ.INI found in Windows sys dir before copying new files.
  35. '* 
  36. '*    Rev 1.15   05 Mar 1993 12:08:38   pws
  37. '* Fix support for multiple-disk installations, which had broken when
  38. '* we started determining which product we were by testing for the
  39. '* existence of name.EXE on the first diskette but it had been put
  40. '* on the second one.  Now determine which product we are by testing
  41. '* for existence of product-specific section in SETUP.INF file.
  42. '* 
  43. '*    Rev 1.14   22 Dec 1992 13:17:36   pws
  44. '* Reflect changed dialog id's in BLDCUI\DIALOGS.H.
  45. '* 
  46. '*    Rev 1.13   15 Dec 1992 14:47:18   pws
  47. '* Added CTL3D.DLL.
  48. '* 
  49. '*    Rev 1.12   10 Nov 1992 12:37:56   pws
  50. '* Made more dialogs product-specific.
  51. '* 
  52. '* ---
  53. '* See logfile for earlier revision comments
  54. '*
  55. '* Copyright (C) 1990- by Greg Hendershott.  All rights reserved.
  56. '**************************************************************************
  57.  
  58. '$INCLUDE 'setupapi.inc'
  59. '$INCLUDE 'msdetect.inc'
  60. '$INCLUDE 'msregdb.inc'
  61.  
  62. ''These should have all been in SETUPAPI.INC.
  63. ''Note that duplicate definitions are errors and so are commented out!
  64.  
  65. 'CONST MB_OK               = &H0000
  66. CONST MB_OKCANCEL         = &H0001
  67. CONST MB_ABORTRETRYIGNORE = &H0002
  68. CONST MB_YESNOCANCEL      = &H0003
  69. CONST MB_YESNO            = &H0004
  70. CONST MB_RETRYCANCEL      = &H0005
  71. CONST MB_TYPEMASK         = &H000F
  72.  
  73. 'CONST MB_ICONHAND         = &H0010
  74. CONST MB_ICONQUESTION     = &H0020
  75. CONST MB_ICONEXCLAMATION  = &H0030
  76. CONST MB_ICONASTERISK     = &H0040
  77. CONST MB_ICONMASK         = &H00F0
  78.  
  79. CONST MB_ICONINFORMATION  = MB_ICONASTERISK
  80. CONST MB_ICONSTOP         = MB_ICONHAND
  81.  
  82. CONST MB_DEFBUTTON1       = &H0000
  83. CONST MB_DEFBUTTON2       = &H0100
  84. CONST MB_DEFBUTTON3       = &H0200
  85. CONST MB_DEFMASK          = &H0F00
  86.  
  87. CONST MB_APPLMODAL        = &H0000
  88. CONST MB_SYSTEMMODAL      = &H1000
  89. 'CONST MB_TASKMODAL        = &H2000
  90.  
  91. CONST MB_NOFOCUS          = &H8000
  92.  
  93. CONST IDOK                = 1
  94. CONST IDCANCEL            = 2
  95. CONST IDABORT             = 3
  96. CONST IDRETRY             = 4
  97. CONST IDIGNORE            = 5
  98. CONST IDYES               = 6
  99. CONST IDNO                = 7
  100.  
  101. ''Dialog ID's
  102. CONST WELCOME_PRO             = 170
  103. CONST WELCOME_DEMO            = 171
  104. CONST WELCOME_LITE            = 172
  105. CONST WELCOME_LITEDEMO        = 173
  106. CONST ASKQUIT                 = 200
  107. CONST DESTPATH                = 300
  108. CONST USERINFO                  = 310
  109. CONST EXITFAILURE             = 400
  110. CONST EXITQUIT_PRO            = 670
  111. CONST EXITQUIT_DEMO           = 671
  112. CONST EXITQUIT_LITE           = 672
  113. CONST EXITQUIT_LITEDEMO       = 673
  114. CONST EXITSUCCESS_PRO         = 770
  115. CONST EXITSUCCESS_DEMO        = 771
  116. CONST EXITSUCCESS_LITE        = 772
  117. CONST EXITSUCCESS_LITEDEMO    = 773
  118. CONST APPHELP_PRO             = 970
  119. CONST APPHELP_DEMO            = 971
  120. CONST APPHELP_LITE            = 972
  121. CONST APPHELP_LITEDEMO        = 973
  122. CONST INI_NOT_OVERWRITTEN     = 1000
  123. CONST PATCHES_NOT_OVERWRITTEN = 1100
  124. CONST BADPATH                 = 6400
  125.  
  126. ''Bitmap ID
  127. CONST LOGO = 1
  128.  
  129. GLOBAL COMPANY$
  130. GLOBAL PROGNAME$
  131. GLOBAL PRODUCTNAME$
  132. GLOBAL DEST$        ''Default destination directory.
  133.  
  134. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  135. DECLARE SUB MaybeAssociate (szExt$)
  136.  
  137. INIT:
  138.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  139.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  140.     COMPANY$ = "Twelve Tone Systems"
  141.  
  142.     ''Determine full SETUP.INF path+name (same name for all products).
  143.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  144.     IF szInf$ = "" THEN
  145.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  146.     END IF
  147.     ReadInfFile szInf$
  148.  
  149.     ''Determine which product we are by seeing if specific section name exists.
  150.     IF DoesIniSectionExist(szInf$, "pro") <> 0 THEN
  151.         PROGNAME$ = "WINCAKE"
  152.         PRODUCTNAME$ = "Cakewalk Professional"
  153.         PROGMANGROUPNAME$ = "Cakewalk Professional"
  154.         INIBASENAME$ = "WINCAKE"
  155.         DEST$ = "C:\WINCAKE"
  156.     ELSEIF DoesIniSectionExist(szInf$, "demo") <> 0 THEN
  157.         PROGNAME$ = "WCWDEMO"
  158.         PRODUCTNAME$ = "Cakewalk Professional Demo"
  159.         PROGMANGROUPNAME$ = "Cakewalk Professional"
  160.         INIBASENAME$ = "WINCAKE"
  161.         DEST$ = "C:\WCWDEMO"
  162.     ELSEIF DoesIniSectionExist(szInf$, "lite") <> 0 THEN
  163.         PROGNAME$ = "CAKEHS"
  164.         PRODUCTNAME$ = "Cakewalk Home Studio"
  165.         PROGMANGROUPNAME$ = "Cakewalk Home Studio"
  166.         INIBASENAME$ = "CAKEHS"
  167.         DEST$ = "C:\CAKEHS"
  168.     ELSEIF DoesIniSectionExist(szInf$, "litedemo") <> 0 THEN
  169.         PROGNAME$ = "CHSDEMO"
  170.         PRODUCTNAME$ = "Cakewalk Home Studio Demo"
  171.         PROGMANGROUPNAME$ = "Cakewalk Home Studio"
  172.         INIBASENAME$ = "CAKEHS"
  173.         DEST$ = "C:\CHSDEMO"
  174.     ELSE
  175.         GOTO ERRQUIT
  176.     END IF
  177.  
  178.     winVerReqd$ = "3.1"
  179.  
  180.     SetBitmap CUIDLL$, LOGO
  181.     SetTitle PRODUCTNAME$ + " Setup"
  182.  
  183.     winVer$ = LTRIM$(STR$(GetWindowsMajorVersion())) + "." + LTRIM$(STR$(GetWindowsMinorVersion()))
  184.     IF winVer$ < winVerReqd$ THEN             ''String sort works
  185.         i% = DoMsgBox("Sorry, but your Windows version is "+winVer$+" and "+PRODUCTNAME$+" requires at least Windows "+winVerReqd$+".", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  186.         END
  187.     END IF
  188.  
  189.     ''Disk cost list symbols
  190.     FILECOSTS$   = "FileCosts"
  191.     EXTRACOSTS$  = "ExtraCosts"
  192.     STILLNEEDED$ = "StillNeeded"
  193.     FOR i% = 1 TO 26 STEP 1
  194.         AddListItem EXTRACOSTS$, "0"
  195.     NEXT i%
  196.     ''Add extra cost to Windows drive for ini/progman, etc.
  197.     ixWinDrive% = ASC(UCASE$( MID$(GetWindowsDir(), 1, 1) )) - ASC("A") + 1
  198.     ReplaceListItem EXTRACOSTS$, ixWinDrive%, "10240"
  199.  
  200.  
  201. WELCOME:
  202.     IF PROGNAME$ = "WINCAKE" THEN
  203.         dlg% = WELCOME_PRO
  204.         dlghelp% = APPHELP_PRO
  205.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  206.         dlg% = WELCOME_DEMO
  207.         dlghelp% = APPHELP_DEMO
  208.     ELSEIF PROGNAME$ = "CAKEHS" THEN
  209.         dlg% = WELCOME_LITE
  210.         dlghelp% = APPHELP_LITE
  211.     ELSEIF PROGNAME$ = "CHSDEMO" THEN
  212.         dlg% = WELCOME_LITEDEMO
  213.         dlghelp% = APPHELP_LITEDEMO
  214.     END IF
  215.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", dlghelp%, HELPPROC$)
  216.     IF sz$ = "CONTINUE" THEN
  217.         UIPop 1
  218.     ELSE
  219.         GOSUB ASKQUIT
  220.         GOTO WELCOME
  221.     END IF
  222.  
  223.  
  224. GETPATH:
  225.     SetSymbolValue "EditTextIn", DEST$
  226.     SetSymbolValue "EditFocus", "END"
  227. GETPATHL1:
  228.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", dlghelp%, HELPPROC$)
  229.     DEST$ = GetSymbolValue("EditTextOut")
  230.  
  231.     IF sz$ = "CONTINUE" THEN
  232.         IF IsDirWritable(DEST$) = 0 THEN
  233.             GOSUB BADPATH
  234.             GOTO GETPATHL1
  235.         END IF
  236.         UIPop 1
  237.         ixAppDrive% = ASC(UCASE$( MID$(DEST$, 1, 1) )) - ASC("A") + 1
  238.     ELSEIF sz$ = "REACTIVATE" THEN
  239.         GOTO GETPATHL1
  240.     ELSEIF sz$ = "BACK" THEN
  241.         UIPop 1
  242.         GOTO WELCOME
  243.     ELSE
  244.         GOSUB ASKQUIT
  245.         GOTO GETPATH
  246.     END IF
  247.  
  248. ' Install
  249.     GOSUB INSTALL
  250.     IF StillNeed& > 0 THEN
  251.         GOTO GETPATH
  252.     END IF
  253.  
  254. QUIT:
  255.     ON ERROR GOTO ERRQUIT
  256.  
  257.     IF ERR = 0 THEN
  258.         IF PROGNAME$ = "WINCAKE" THEN
  259.             dlg% = EXITSUCCESS_PRO
  260.         ELSEIF PROGNAME$ = "WCWDEMO" THEN
  261.             dlg% = EXITSUCCESS_DEMO
  262.         ELSEIF PROGNAME$ = "CAKEHS" THEN
  263.             dlg% = EXITSUCCESS_LITE
  264.         ELSEIF PROGNAME$ = "CHSDEMO" THEN
  265.             dlg% = EXITSUCCESS_LITEDEMO
  266.         END IF
  267.     ELSEIF ERR = STFQUIT THEN
  268.         IF PROGNAME$ = "WINCAKE" THEN
  269.             dlg% = EXITQUIT_PRO
  270.         ELSEIF PROGNAME$ = "WCWDEMO" THEN
  271.             dlg% = EXITQUIT_DEMO
  272.         ELSEIF PROGNAME$ = "CAKEHS" THEN
  273.             dlg% = EXITQUIT_LITE
  274.         ELSEIF PROGNAME$ = "CHSDEMO" THEN
  275.             dlg% = EXITQUIT_LITEDEMO
  276.         END IF
  277.     ELSE
  278.         dlg% = EXITFAILURE
  279.     END IF
  280. QUITL1:
  281.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  282.     IF sz$ = "REACTIVATE" THEN
  283.         GOTO QUITL1
  284.     END IF
  285.     UIPop 1
  286.  
  287.     END
  288.  
  289. ERRQUIT:
  290.     i% = DoMsgBox("Installation failure.  Call " + COMPANY$ + " Technical Support", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  291.     END
  292.  
  293.  
  294.  
  295. BADPATH:
  296.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  297.     IF sz$ = "REACTIVATE" THEN
  298.         GOTO BADPATH
  299.     END IF
  300.     UIPop 1
  301.     RETURN
  302.  
  303.  
  304.  
  305. ASKQUIT:
  306.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  307.  
  308.     IF sz$ = "EXIT" THEN
  309.         UIPopAll
  310.         ERROR STFQUIT
  311.     ELSEIF sz$ = "REACTIVATE" THEN
  312.         GOTO ASKQUIT
  313.     ELSE
  314.         UIPop 1
  315.     END IF
  316.     RETURN
  317.  
  318.  
  319.  
  320. '**
  321. '** Purpose:
  322. '**     Builds the copy list and performs all installation operations.
  323. '** Arguments:
  324. '**     none.
  325. '** Returns:
  326. '**     none.
  327. '*************************************************************************
  328. INSTALL:
  329.  
  330.     ' Get user information; we'll stamp later.
  331.     GOSUB DOUSERINFODIALOG
  332.  
  333.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  334.  
  335.     AddSectionFilesToCopyList "app", SrcDir$, DEST$
  336.     IF PROGNAME$ = "WINCAKE" THEN
  337.         AddSectionFilesToCopyList "pro", SrcDir$, DEST$
  338.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  339.         AddSectionFilesToCopyList "demo", SrcDir$, DEST$
  340.     ELSEIF PROGNAME$ = "CAKEHS" THEN
  341.         AddSectionFilesToCopyList "lite", SrcDir$, DEST$
  342.     ELSEIF PROGNAME$ = "CHSDEMO" THEN
  343.         AddSectionFilesToCopyList "litedemo", SrcDir$, DEST$
  344.     END IF
  345.     AddSectionFilesToCopyList "appdlls", SrcDir$, DEST$
  346.     AddSectionFilesToCopyList "system", SrcDir$, GetWindowsSysDir()
  347.  
  348.     StillNeed& = GetCopyListCost(EXTRACOSTS$, FILECOSTS$, STILLNEEDED$)
  349.     IF StillNeed& > 0 THEN
  350.         ClearCopyList
  351.         FOR ix% = 1 TO 26 STEP 1              ''find first drive that needs space
  352.             need1& = VAL(GetListItem(STILLNEEDED$, ix%))
  353.             IF need1& > 0 THEN
  354.                 GOTO FNDDRV
  355.             END IF
  356.         NEXT ix%
  357.         ix = ixAppDrive                       ''(shouldn't happen)
  358.         need1& = 0
  359.         StillNeed& = 1
  360. FNDDRV:
  361.         need$  = LTRIM$(STR$( (need1&+1023) / 1024 )) + "K bytes"
  362.         cost$  = LTRIM$(STR$( (VAL(GetListItem(FILECOSTS$, ix%))+1023) / 1024 )) + "K"
  363.         drive$ = CHR$(ix% - 1 + ASC("A")) + ":"
  364.         msg$ = "Sorry, "+PRODUCTNAME$+" needs "+need$+" more ("+cost$+" total) on drive "+drive$+".  Clear space or try a new path."
  365.         i% = DoMsgBox(msg$, "Setup Problem", MB_RETRYCANCEL+MB_TASKMODAL+MB_ICONHAND)
  366.         IF i% = IDCANCEL THEN
  367.             GOSUB ASKQUIT
  368.         END IF
  369.         RETURN          ''must RETURN out of GOSUB to pop stack, not just GOTO
  370.     END IF
  371.  
  372.     CreateDir DEST$, cmoNone
  373.  
  374.     OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  375.     WriteToLogFile ""
  376.     WriteToLogFile "User chose as destination directory: '" + DEST$ + "'"
  377.     WriteToLogFile "May have had to create the directory: " + DEST$
  378.     WriteToLogFile ""
  379.  
  380.     CopyFilesInCopyList
  381.  
  382.     ' Important: Do this here before any dialogs with an Exit button, so
  383.     ' user cannot avoid stamping.
  384.     GOSUB STAMPUSERINFO
  385.  
  386.     SetRegKeyValue PROGNAME$, PRODUCTNAME$
  387.     SetRegKeyValue PROGNAME$+"\shell\print", ""
  388.     SetRegKeyValue PROGNAME$+"\shell\open\command", MakePath(DEST$,PROGNAME$+".EXE") + " %1"
  389.     MaybeAssociate "wrk"
  390.     MaybeAssociate "mid"
  391.     MaybeAssociate "mff"
  392.     MaybeAssociate "tpl"
  393.  
  394. ''Deal with old installation where our app DLL's were in WINDOWS\SYSTEM.
  395. ''No more need to delete old DLL's, since we don't use any with same name now.
  396. ''If old TTSSEQ.INI exists in sysdir but not in appdir, copy it now to preserve settings.
  397.     SysDir$ = GetWindowsSysDir()
  398.     IF DoesFileExist(SysDir$+"TTSSEQ.INI",femExists) <> 0 AND DoesFileExist(DEST$+"TTSSEQ.INI",femExists) = 0 THEN
  399.         CopyFile SysDir$+"TTSSEQ.INI", DEST$+"\TTSSEQ.INI", cmoNone, 0
  400.     END IF
  401.  
  402.     IF PROGNAME$ <> "CAKEHS" AND PROGNAME$ <> "CHSDEMO" THEN
  403.         ini$ = MakePath(DEST$, INIBASENAME$+".INI")
  404.         drm$ = MakePath(DEST$, "DRM.INI")
  405.         IF DoesFileExist(ini$,femExists) = 0 THEN
  406.             CopyFile drm$, ini$, cmoVital, 0
  407.         ELSE
  408.             sz$ = UIStartDlg(CUIDLL$, INI_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  409.             IF sz$ = "EXIT" THEN
  410.                 GOSUB ASKQUIT
  411.             ELSE
  412.                 UIPop 1
  413.             END IF
  414.         END IF
  415.     END IF
  416.  
  417.     patches$ = MakePath(DEST$, "PATCHES.INI")
  418.     pat$ = MakePath(DEST$, "PAT.INI")
  419.     IF DoesFileExist(patches$,femExists) = 0 THEN
  420.         CopyFile pat$, patches$, cmoVital, 0
  421.     ELSE
  422.         sz$ = UIStartDlg(CUIDLL$, PATCHES_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  423.         IF sz$ = "EXIT" THEN
  424.             GOSUB ASKQUIT
  425.         ELSE
  426.             UIPop 1
  427.         END IF
  428.     END IF
  429.  
  430.     CreateProgmanGroup PROGMANGROUPNAME$, "", cmoNone
  431.     ShowProgmanGroup  PROGMANGROUPNAME$, 1, cmoNone
  432.     CreateProgmanItem PROGMANGROUPNAME$, PRODUCTNAME$, MakePath(DEST$,PROGNAME$+".EXE"), "", cmoOverwrite
  433.     CreateProgmanItem PROGMANGROUPNAME$, "README.WRI", "write.exe "+MakePath(DEST$,"readme.wri"), "", cmoOverwrite
  434.     WriteToLogFile ""
  435.  
  436.     WriteToLogFile "SUB Install completed."
  437.     CloseLogFile
  438.  
  439.     RETURN
  440.  
  441.  
  442.  
  443. '**
  444. '** Purpose:
  445. '**     Appends a file name to the end of a directory path,
  446. '**     inserting a backslash character as needed.
  447. '** Arguments:
  448. '**     szDir$  - full directory path (with optional ending "\")
  449. '**     szFile$ - filename to append to directory
  450. '** Returns:
  451. '**     Resulting fully qualified path name.
  452. '*************************************************************************
  453. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  454.     IF szDir$ = "" THEN
  455.         MakePath = szFile$
  456.     ELSEIF szFile$ = "" THEN
  457.         MakePath = szDir$
  458.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  459.         MakePath = szDir$ + szFile$
  460.     ELSE
  461.         MakePath = szDir$ + "\" + szFile$
  462.     END IF
  463. END FUNCTION
  464.  
  465.  
  466.  
  467. '**
  468. '** Purpose:
  469. '** Arguments:
  470. '** Returns:
  471. '**     none.
  472. '*************************************************************************
  473. DOUSERINFODIALOG:
  474. ' Get user info for stamping later
  475.     IF PROGNAME$ <> "WCWDEMO" AND PROGNAME$ <> "CHSDEMO" THEN
  476. GETUSERINFO:
  477.         sz$ = UIStartDlg(CUIDLL$, USERINFO, "FNameOrgDlgProc", dlghelp%, HELPPROC$)
  478.         IF sz$ = "REACTIVATE" THEN
  479.             GOTO GETUSERINFO
  480.         END IF
  481.  
  482.         szUser$ = GetSymbolValue( "NameOut" )
  483.         szCo$ = GetSymbolValue( "OrgOut" )
  484.     
  485.         ' Company may be blank, but not the other two
  486.         IF szUser$ = "" THEN
  487.             msg$ = "You must supply your name or Setup cannot proceed."
  488.             i% = DoMsgBox(msg$, "Setup Problem", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  489.             GOTO GETUSERINFO
  490.         END IF
  491.  
  492.         ' Dismiss dialog now that we've validated
  493.         UIPop 1
  494.     END IF
  495.  
  496.     RETURN
  497.  
  498.  
  499. '**
  500. '** Purpose:
  501. '** Arguments:
  502. '** Returns:
  503. '**     none.
  504. '*************************************************************************
  505. STAMPUSERINFO:
  506. ' Stamp user info
  507.     IF PROGNAME$ <> "WCWDEMO" AND PROGNAME$ <> "CHSDEMO" THEN
  508.  
  509.         ' szUser$ szCo$ were prompted for above
  510.         szDat$ = CHR$(LEN(szUser$)) + szUser$
  511.         szDat$ = szDat$ + CHR$(LEN(szCo$)) + szCo$
  512.  
  513.         IF PROGNAME$ = "WINCAKE" THEN
  514.             szInfSect$ = "pro"
  515.         ELSEIF PROGNAME$ = "CAKEHS" THEN
  516.             szInfSect$ = "lite"
  517.         END IF
  518.     
  519.         ' 6 is the resource type for STRINGTABLE entries
  520.         '
  521.         ' &H401 is the upper 12 bits of IDS_USERNAME (0x4000) + 1.
  522.         '
  523.         ' In DSKLAYT we specified a reference key for the .EXE which
  524.         ' is the same as PROGNAME$.
  525.         StampResource szInfSect$,PROGNAME$,DEST$,6,&H401,szDat$,LEN(szDat$)
  526.     END IF
  527.  
  528.     RETURN
  529.  
  530.  
  531. '**
  532. '** Purpose:
  533. '**     Associates given filetype with us, but asks for user confirmation
  534. '**     if already set to something else.
  535. '** Arguments:
  536. '**     szExt$ - filetype extension, e.g. "mid"
  537. '** Returns:
  538. '**     none.
  539. '*************************************************************************
  540. SUB MaybeAssociate (szExt$) STATIC
  541.     oldProg$ = ""
  542.     ok% = IDYES
  543.  
  544. 'Check Registration Database (overrides WIN.INI [Extensions]).
  545.  
  546.     oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue("."+szExt$+"\shell\open\command") ) )
  547.     IF oldCmd$ = "" THEN    'didn't find direct association, check via prog name
  548.         oldProg$ = LTRIM$( RTRIM$( GetRegKeyValue("."+szExt$) ) )
  549.         IF oldProg$ <> "" THEN
  550.             oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue(oldProg$+"\shell\open\command") ) )
  551.             oldProduct$ = LTRIM$( RTRIM$( GetRegKeyValue(oldProg$) ) )
  552.             IF oldProduct$ <> "" THEN    'long product name found, use it
  553.                 oldProg$ = oldProduct$
  554.             END IF
  555.         END IF
  556.     END IF
  557.     IF oldCmd$ <> "" THEN
  558.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  559.             IF oldProg$ = "" THEN   'no short or long name, parse command string
  560.                 j% = INSTR(oldCmd$, " ")
  561.                 IF j% > 1 THEN
  562.                     oldProg$ = MID$(oldCmd$, 1, j%-1)
  563.                 ELSE
  564.                     oldProg$ = oldCmd$
  565.                 END IF
  566.             END IF
  567.         ELSE                            'it's us, clear oldProg$ => no confirm
  568.             oldProg$ = ""
  569.         END IF
  570.         GOTO MAYBE_CONFIRM      'found association, no need to examine WIN.INI
  571.     END IF
  572.  
  573. 'Check WIN.INI [Extensions].
  574.  
  575.     oldCmd$ = UCASE$( LTRIM$( GetIniKeyString("WIN.INI","Extensions",szExt$) ) )
  576.     IF oldCmd$ <> "" THEN
  577.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  578.             j% = INSTR(oldCmd$, " ")
  579.             IF j% > 1 THEN
  580.                 oldProg$ = MID$(oldCmd$, 1, j%-1)
  581.             ELSE
  582.                 oldProg$ = oldCmd$
  583.             END IF
  584.         END IF
  585.     END IF
  586.  
  587. 'Get user confirmation if necessary, and do the association if ok.
  588.  
  589. MAYBE_CONFIRM:
  590.     IF oldProg$ <> "" THEN
  591.         ok% = DoMsgBox("."+UCASE$(szExt$)+" files are currently associated with "+oldProg$+".  Switch association to "+PRODUCTNAME$+"?", "Setup Question", MB_YESNO+MB_TASKMODAL+MB_ICONQUESTION)
  592.     END IF
  593.  
  594.     IF ok% = IDYES THEN
  595.         DeleteRegKey   "."+szExt$       'delete all keys for any old direct association
  596.         SetRegKeyValue "."+szExt$, PROGNAME$
  597.         CreateIniKeyValue "WIN.INI", "Extensions", szExt$, MakePath(DEST$,PROGNAME$+".EXE") + " ^." + szExt$, cmoOverwrite
  598.     END IF
  599.  
  600. END SUB
  601.